{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. 线性回归入门\n",
    "## 1.1 数据生成\n",
    "\n",
    "线性回归是机器学习算法的一个敲门砖，为了能够更方便直观地带大家入门，这里使用人工生成的简单的数据。生成数据的思路是设定一个二维的函数（维度高了没办法在平面上画出来），根据这个函数生成一些离散的数据点，对每个数据点我们可以适当的加一点波动，也就是噪声，最后看看我们算法的拟合或者说回归效果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt \n",
    "\n",
    "def true_fun(X): # 这是我们设定的真实函数，即ground truth的模型\n",
    "    return 1.5*X + 0.2\n",
    "\n",
    "np.random.seed(0) # 设置随机种子\n",
    "n_samples = 30 # 设置采样数据点的个数\n",
    "\n",
    "'''生成随机数据作为训练集，并且加一些噪声'''\n",
    "X_train = np.sort(np.random.rand(n_samples)) \n",
    "y_train = (true_fun(X_train) + np.random.randn(n_samples) * 0.05).reshape(n_samples,1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.2 定义模型\n",
    "生成数据之后，我们可以定义我们的算法模型，直接从sklearn库中导入类LinearRegression即可，由于线性回归比较简单，所以这个类的输入参数也比较少，不需要多加设置。\n",
    "定义好模型之后直接训练，就能得到我们拟合的一些参数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "输出参数w： [[1.4474774]]\n",
      "输出参数b： [0.22557542]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression # 导入线性回归模型\n",
    "model = LinearRegression() # 定义模型\n",
    "model.fit(X_train[:,np.newaxis], y_train) # 训练模型\n",
    "print(\"输出参数w：\",model.coef_) # 输出模型参数w\n",
    "print(\"输出参数b：\",model.intercept_) # 输出参数b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.3 模型测试与比较\n",
    "可以看到线性回归拟合的参数是1.44和0.22，很接近实际的1.5和0.2，说明我们的算法性能还不错。\n",
    "下面我们直接选取一批数据测试，然后通过画图看看算法模型与实际模型的差距。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_test = np.linspace(0, 1, 100)\n",
    "plt.plot(X_test, model.predict(X_test[:, np.newaxis]), label=\"Model\")\n",
    "plt.plot(X_test, true_fun(X_test), label=\"True function\")\n",
    "plt.scatter(X_train,y_train) # 画出训练集的点\n",
    "plt.legend(loc=\"best\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于我们的数据比较简单，所以从图中也可以看出，我们的算法拟合曲线与实际的很接近。对于更复杂以及高维的情况，线性回归不能满足我们回归的需求，这时候我们需要用到更为高级一些的多项式回归了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. 多项式回归\n",
    "\n",
    "多项式回归的思路一般是将$m$次多项式方程转化为$m$线性回归方程，即将$y=b_0+b_1*x+...+b_m*x^m$转换为$y=b_0*+b_1*x_1+...+b_m*x_m$（令$x_m=x^m$即可），然后使用线性回归的方法求出相应的参数。\n",
    "一般实际的算法也是如此，我们将多项式特征分析器和线性回归串联，算出线性回归的参数之后倒推过去就行。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1008x360 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import PolynomialFeatures # 导入能够计算多项式特征的类\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.model_selection import cross_val_score\n",
    "\n",
    "def true_fun(X): # 这是我们设定的真实函数，即ground truth的模型\n",
    "    return np.cos(1.5 * np.pi * X)\n",
    "np.random.seed(0)\n",
    "n_samples = 30 # 设置随机种子\n",
    "\n",
    "X = np.sort(np.random.rand(n_samples)) \n",
    "y = true_fun(X) + np.random.randn(n_samples) * 0.1\n",
    "\n",
    "degrees = [1, 4, 15] # 多项式最高次\n",
    "plt.figure(figsize=(14, 5))\n",
    "for i in range(len(degrees)):\n",
    "    ax = plt.subplot(1, len(degrees), i + 1)\n",
    "    plt.setp(ax, xticks=(), yticks=())\n",
    "    polynomial_features = PolynomialFeatures(degree=degrees[i],\n",
    "                                             include_bias=False)\n",
    "    linear_regression = LinearRegression()\n",
    "    pipeline = Pipeline([(\"polynomial_features\", polynomial_features),\n",
    "                         (\"linear_regression\", linear_regression)]) # 使用pipline串联模型\n",
    "    pipeline.fit(X[:, np.newaxis], y)\n",
    "    \n",
    "    scores = cross_val_score(pipeline, X[:, np.newaxis], y,scoring=\"neg_mean_squared_error\", cv=10) # 使用交叉验证\n",
    "    X_test = np.linspace(0, 1, 100)\n",
    "    plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label=\"Model\")\n",
    "    plt.plot(X_test, true_fun(X_test), label=\"True function\")\n",
    "    plt.scatter(X, y, edgecolor='b', s=20, label=\"Samples\")\n",
    "    plt.xlabel(\"x\")\n",
    "    plt.ylabel(\"y\")\n",
    "    plt.xlim((0, 1))\n",
    "    plt.ylim((-2, 2))\n",
    "    plt.legend(loc=\"best\")\n",
    "    plt.title(\"Degree {}\\nMSE = {:.2e}(+/- {:.2e})\".format(\n",
    "        degrees[i], -scores.mean(), scores.std()))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.1 交叉验证\n",
    "在这个算法训练过程中，我们使用了一个技巧，就是交叉验证，类似的方法还有holdout检验以及自助法（交叉验证的升级版，即每次又放回去的选取数据）。\n",
    "交叉验证法的作用就是尝试利用不同的训练集/测试集划分来对模型做多组不同的训练/测试，来应对测试结果过于片面以及训练数据不足的问题。过程如下图：\n",
    "\n",
    "![jupyter](./assets/cross_valid.png)\n",
    "\n",
    "## 2.2 过拟合与欠拟合\n",
    "\n",
    "我们知道多项式回归根据最高次数的不同，其回归的效果对于同一数据可能也不会不同，高次的多项式能够产生更多的弯曲从而拟合更多非线性规则的数据，低次的则贴近线性回归。\n",
    "但在这过程中，也会产生一个过拟合与欠拟合的问题。"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "fbea1422c2cf61ed9c0cfc03f38f71cc9083cc288606edc4170b5309b352ce27"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
